// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: http://codemirror.net/LICENSE

(function() {
  var mode = CodeMirror.getMode({ indentUnit: 2 }, 'xml'),
    mname = 'xml';
  function MT(name) {
    test.mode(name, mode, Array.prototype.slice.call(arguments, 1), mname);
  }

  MT(
    'matching',
    '[tag&bracket <][tag top][tag&bracket >]',
    '  text',
    '  [tag&bracket <][tag inner][tag&bracket />]',
    '[tag&bracket </][tag top][tag&bracket >]',
  );

  MT(
    'nonmatching',
    '[tag&bracket <][tag top][tag&bracket >]',
    '  [tag&bracket <][tag inner][tag&bracket />]',
    '  [tag&bracket </][tag&error tip][tag&bracket&error >]',
  );

  MT(
    'doctype',
    '[meta <!doctype foobar>]',
    '[tag&bracket <][tag top][tag&bracket />]',
  );

  MT(
    'cdata',
    '[tag&bracket <][tag top][tag&bracket >]',
    '  [atom <![CDATA[foo]',
    '[atom barbazguh]]]]>]',
    '[tag&bracket </][tag top][tag&bracket >]',
  );

  // HTML tests
  mode = CodeMirror.getMode({ indentUnit: 2 }, 'text/html');

  MT(
    'selfclose',
    '[tag&bracket <][tag html][tag&bracket >]',
    '  [tag&bracket <][tag link] [attribute rel]=[string stylesheet] [attribute href]=[string "/foobar"][tag&bracket >]',
    '[tag&bracket </][tag html][tag&bracket >]',
  );

  MT(
    'list',
    '[tag&bracket <][tag ol][tag&bracket >]',
    '  [tag&bracket <][tag li][tag&bracket >]one',
    '  [tag&bracket <][tag li][tag&bracket >]two',
    '[tag&bracket </][tag ol][tag&bracket >]',
  );

  MT(
    'valueless',
    '[tag&bracket <][tag input] [attribute type]=[string checkbox] [attribute checked][tag&bracket />]',
  );

  MT(
    'pThenArticle',
    '[tag&bracket <][tag p][tag&bracket >]',
    '  foo',
    '[tag&bracket <][tag article][tag&bracket >]bar',
  );
})();
